Banco de Dados

Aula 01 - Visão geral e ambiente




Helder Jefferson Ferreira da Luz

helder.luz@ifpr.edu.br

Objetivos da aula

  • Entender o que é um banco de dados e por que ele é essencial.
  • Conhecer os principais tipos de bancos de dados.
  • Aprender as fases de um projeto de banco de dados.
  • Configurar o ambiente de desenvolvimento (XAMPP, MariaDB, phpMyAdmin).

Para começar: imagine uma loja online

Você criou uma pequena loja virtual para vender camisetas.

  • Clientes: Você anota os nomes e endereços em um caderno. 📒
  • Produtos: Você tem uma lista de modelos e estoques em uma planilha. 📊
  • Pedidos: Cada venda é um e-mail ou uma mensagem de WhatsApp. 📱

Funciona, mas... e quando a loja crescer?

Os problemas começam a aparecer...

  • Como saber qual cliente comprou mais?
  • E se você anota o endereço de um cliente errado em um dos pedidos?
  • Como controlar o estoque em tempo real quando duas pessoas compram a mesma camiseta ao mesmo tempo?
  • É seguro guardar os dados dos clientes em um caderno?

Conclusão: Gerenciar dados de forma manual ou com ferramentas simples se torna caótico, ineficiente e arriscado.

A Pirâmide do Conhecimento

Para resolver esses problemas, precisamos organizar os fatos brutos (dados) para que eles ganhem contexto (informação) e nos ajudem a tomar decisões (conhecimento).


  • Dados: "35", "Maria", "Curitiba", "Camiseta Azul".
  • Informação: Maria, de 35 anos, que mora em Curitiba, comprou uma Camiseta Azul.
  • Conhecimento: Clientes de Curitiba preferem camisetas azuis. Vamos criar uma promoção!

A Solução: Banco de Dados

Um Banco de Dados é uma coleção organizada de dados, gerenciada por um software especializado: o SGBD.

  • SGBD (Sistema de Gerenciamento de Banco de Dados): É um sistema que facilita o processo de definição, construção, manipulação e compartilhamento de banco de dados entre diversos usuários e aplicações.
  • Exemplos: MySQL, PostgreSQL, MariaDB, SQL Server, Oracle.

Banco de Dados

Diagrama simplificado de um ambiente de sistema de banco de dados.

NAVATHE, S. B. Sistema de Banco de Dados. 2019.

Tipos de Banco de Dados

Existem vários modelos, mas dois grandes grupos dominam o mercado:

  1. Bancos de Dados Relacionais (SQL):

    • Modelo tradicional, extremamente confiável.
    • Organiza dados em tabelas (como planilhas superpoderosas).
    • Linguagem: SQL.
    • Foco: Consistência.
  2. Bancos de Dados Não Relacionais (NoSQL):

    • Mais recentes, flexíveis e escaláveis.
    • Vários modelos de organização (documentos, grafos, etc.).
    • Foco: Velocidade e grande volume de dados.

Foco do Curso: Banco de Dados Relacional

  • Por quê? É o padrão da indústria para sistemas que exigem alta confiabilidade, como e-commerce, sistemas bancários e de gestão.
  • Estrutura: Os dados são organizados em tabelas.
    • Tabela: Representa uma "coisa" (ex: CLIENTES).
    • Linha: Um registro (tupla) específico (ex: o cliente João).
    • Coluna: Um atributo desse registro (ex: email).
  • Relacionamentos: As tabelas se conectam de forma lógica, garantindo a integridade.

Banco de Dados Relacional

Bancos de Dado NoSQL

São otimizados para diferentes tipos de dados, como documentos:

  • Documentos 📄 (MongoDB): Ótimo para dados complexos e variados, como um perfil de usuário com várias configurações.
  • Chave-Valor 🔑 (Redis): Extremamente rápido, perfeito para dados que mudam o tempo todo, como o placar de um jogo online.
  • Grafos 🕸️ (Neo4j): Ideal para analisar relacionamentos, como uma rede de amigos ou sugestões de produtos.
  • Colunares 📊 (Cassandra): Potente para analisar enormes volumes de dados, como o histórico de cliques em um site.

Fases de um Projeto de Banco de Dados

Criar um bom banco de dados é como construir uma casa: precisa de um projeto.


  1. Análise de Requisitos: O que vamos construir? (A planta baixa)
  2. Projeto Conceitual: Um rascunho de alto nível. (O desenho 3D)
  3. Projeto Lógico: O projeto técnico detalhado. (As plantas de engenharia)
  4. Projeto Físico: A construção em si. (A escolha dos materiais)

Fase 1: Análise de Requisitos

É a fase de investigação. O objetivo é entender o negócio.

  • O que fazer? Conversar com os futuros usuários, analisar documentos e entender quais informações o sistema precisa guardar e fornecer.
  • Pergunta-chave: "O que o sistema precisa fazer?"
  • Resultado: Uma lista de requisitos.
    • Exemplo: "O sistema deve registrar clientes com nome, email e telefone."
    • "Deve ser possível consultar o histórico de pedidos de um cliente."

Fase 2: Projeto Conceitual

É a fase de modelagem abstrata. Criamos um mapa das informações do negócio, sem pensar em tecnologia.

  • Ferramenta: DER (Diagrama Entidade-Relacionamento).
  • O que fazer? Identificar as "coisas" importantes (entidades, ex: Cliente, Produto) e como elas se relacionam (ex: um Cliente faz um Pedido).
  • Foco: No negócio, não no banco de dados.

Fase 3: Projeto Lógico

É a fase de tradução técnica. Transformamos o DER em um modelo que o SGBD entende.

  • O que fazer? Converter as entidades e relacionamentos do DER em um esquema relacional (tabelas, colunas, chaves primárias e estrangeiras).
  • Resultado: A estrutura final das tabelas.
    • CLIENTES(id_cliente, nome, email, telefone)
    • PEDIDOS(id_pedido, data, id_cliente)

Fase 4: Projeto Físico

É a fase de implementação e otimização. Aqui, escolhemos o SGBD e definimos os detalhes finais.

  • O que fazer?
    • Escolher os tipos de dados exatos (VARCHAR(100), INT, DATETIME).
    • Criar índices para acelerar as consultas.
    • Definir configurações de armazenamento.
  • Foco: Desempenho e detalhes técnicos.

Projeto do Banco de Dados

NAVATHE, S. B. Sistema de Banco de Dados. 2019.

Ambiente de Trabalho

  • XAMPP: Um pacote que instala facilmente um ambiente de servidor web completo. Usaremos dois de seus componentes:
    1. MariaDB: O SGBD. É um "fork" (derivação) do MySQL, criado pela comunidade e totalmente compatível.
    2. phpMyAdmin: Uma ferramenta web que serve como cliente para administrar o MariaDB. Com ela, podemos criar tabelas, executar comandos SQL, etc.

Arquitetura: O MariaDB é o servidor (onde os dados ficam). O phpMyAdmin é o cliente (como interagimos com o servidor).

Execução (1/2): Instalação

  1. Inicie o XAMPP Control Panel.
  2. Dê "Start" nos módulos Apache e MySQL.
    • O Apache é o servidor web necessário para rodar o phpMyAdmin.
    • O "MySQL" do XAMPP, na verdade, é o MariaDB.
  3. Abra seu navegador e acesse http://localhost/phpmyadmin.
    • Se a porta 80 estiver ocupada, o XAMPP pode usar outra (ex: 8080). Nesse caso, acesse http://localhost:8080/phpmyadmin.

Execução (2/2): Criando nosso Usuário

Vamos criar um usuário específico para as aulas para não usar o root (superusuário).

  1. No phpMyAdmin, vá para a aba "Contas de usuário".
  2. Clique em "Adicionar conta de usuário".
  3. Preencha o formulário:
    • Nome de usuário: aluno
    • Host: localhost
    • Senha: aluno123 (ou uma de sua preferência)
  4. Marque a opção: "Criar banco de dados com o mesmo nome e conceder todos os privilégios."
  5. Clique em "Executar" no final da página.

Agora temos um usuário aluno e um banco de dados chamado aluno para trabalhar.

Dúvidas? 🤔

Tarefa

  • Garantir que o ambiente XAMPP (Apache e MySQL/MariaDB) está instalado e funcionando.
  • Acessar o phpMyAdmin com sucesso.
  • Criar o usuário aluno e o banco de dados aluno conforme os passos do slide "Execução".

- Compreender as garantias **ACID** que tornam os SGBDs confiáveis.

[ *Ilustração: Uma pirâmide com a base "Dados", o meio "Informação" e o topo "Conhecimento"* ]

O objetivo de um banco de dados é nos ajudar a subir nessa pirâmide.

- É o programa que resolve os problemas de inconsistência, segurança e acesso, permitindo que a gente se concentre na informação.

[ *Ilustração: Ícone de planilha com um ❌ sobreposto ao lado de um ícone de banco de dados (cilindro) com um ✅* ]

<style scoped> img { background: white; padding: 10px; border-width: 4px; border-style: solid; border-image: linear-gradient(to right, rgba(255, 0, 255, 1), rgba(0, 255, 255, 1)) 1; border-image-slice: 1; } </style>

Neste curso, nosso foco será 100% no **modelo relacional**.

[ *Ilustração: Duas tabelas simples (Clientes e Pedidos) se conectando por uma linha (id_cliente)* ]

![](images/exemplo_relacional.svg)

[ *Ilustração: Ícones de pessoas conversando, documentos e listas de tarefas.* ]

--- ## Fase 2: Exemplo de DER Completo Para a nossa loja, o diagrama conceitual completo seria mais detalhado, especialmente para lidar com os itens de um pedido. - **Entidades**: `CLIENTE`, `PEDIDO`, `PRODUTO`. - **Relacionamento N:M**: Um `PEDIDO` pode ter vários `PRODUTOS`, e um `PRODUTO` pode estar em vários `PEDIDOS`. - **Solução**: Criamos uma entidade associativa chamada `ITEM_PEDIDO`. <br> [ *Ilustração: Diagrama ER com as 3 entidades principais. CLIENTE se liga a PEDIDO. PEDIDO e PRODUTO se ligam à entidade associativa ITEM_PEDIDO no centro.* ] - **CLIENTE** (`id_cliente`, nome, email) - **PEDIDO** (`id_pedido`, data, status) - **PRODUTO** (`id_produto`, nome, preco) - **ITEM_PEDIDO** (`quantidade`, `preco_unitario`) **Leitura do Diagrama:** - Um `CLIENTE` faz (1,N) `PEDIDOS`. - Um `PEDIDO` é composto por (1,N) `ITENS_PEDIDO`. - Um `PRODUTO` pode estar em (0,N) `ITENS_PEDIDO`.

- **Independência**: Ainda não depende de um SGBD específico (MySQL, PostgreSQL, etc.).

- **Dependência**: Totalmente ligado ao SGBD escolhido.

[ *Ilustração: Ícones de engrenagem, um velocímetro e logos de SGBDs (MariaDB, PostgreSQL).* ]

--- # Garantias ACID: A Base da Confiança Por que podemos confiar em uma transação bancária? Por causa do **ACID**. Todo SGBD relacional sério segue essas 4 propriedades para garantir a integridade das transações. - **A**tomicidade - **C**onsistência - **I**solamento - **D**urabilidade Vamos ver cada uma. --- ### Atomicidade (A) > Uma transação ou acontece **por completo**, ou **não acontece nada**. É a regra do "tudo ou nada". - **Exemplo**: Em uma transferência bancária, a operação envolve duas etapas: debitar da conta A e creditar na conta B. - Se o sistema falhar após o débito, mas antes do crédito, a atomicidade garante que a operação inteira seja desfeita (`rollback`). - **Nunca** existirá uma "meia transferência". --- ### Consistência (C) > A transação só é concluída se todas as **regras do banco** forem satisfeitas. O banco de dados sempre estará em um estado válido. - **Exemplo**: Uma regra de negócio pode ser que o saldo de uma conta não pode ficar negativo. - Se uma transferência for maior que o saldo disponível, a transação é bloqueada e desfeita, mantendo a consistência dos dados. - Outras regras incluem tipos de dados (não inserir texto em campo de data) e chaves estrangeiras. --- ### Isolamento (I) > Transações concorrentes **não interferem** umas nas outras. É como se cada transação acontecesse em sua própria "bolha", em sequência, mesmo que estejam rodando ao mesmo tempo. - **Exemplo**: Se duas pessoas tentam comprar o último ingresso para um show ao mesmo tempo, o isolamento garante que apenas uma delas consiga. - O SGBD gerencia "filas" e "travas" internas para evitar que uma transação leia dados "sujos" (ainda não confirmados) de outra. --- ### Durabilidade (D) > Uma vez que a transação é confirmada (`commit`), ela é **permanente**. Os dados não serão perdidos, mesmo que o sistema falhe (ex: queda de energia) logo em seguida. - **Como?** O SGBD escreve as alterações em um **log de transações** em disco antes de confirmar a operação. - Se o sistema cair, ele usa esse log para reconstruir o estado do banco de dados e garantir que nenhuma transação confirmada seja perdida.

Tudo que aprendermos para um, vale para o outro.

- Tirar um print da tela do phpMyAdmin mostrando o banco de dados `aluno` criado e o usuário logado.